package com.pd.backend.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pd.backend.dao.PdTruckTypeDao;
import com.pd.backend.dao.PdTruckTypeGoodsTypeDao;
import com.pd.backend.dto.GoodsTypeDto;
import com.pd.backend.dto.TruckTypeDto;
import com.pd.backend.entity.PdGoodsType;
import com.pd.backend.dao.PdGoodsTypeDao;
import com.pd.backend.entity.PdTruckType;
import com.pd.backend.entity.PdTruckTypeGoodsType;
import com.pd.backend.service.PdGoodsTypeService;
import com.pd.backend.utils.UuidUtils;
import com.pd.backend.vo.resp.GetPageVo;
import com.pd.backend.vo.resp.R;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

/**
 * 货物类型表(PdGoodsType)表服务实现类
 *
 * @author GuoXinChao.126@gmail.com
 * @since 2023-02-27 17:14:33
 */
@Service("pdGoodsTypeService")
public class PdGoodsTypeServiceImpl implements PdGoodsTypeService {
    @Resource
    private PdGoodsTypeDao pdGoodsTypeDao;
    @Autowired
    private PdTruckTypeDao pdTruckTypeDao;

    @Autowired
    private PdTruckTypeGoodsTypeDao pdTruckTypeGoodsTypeDao;
    /**
     * 添加接口
     *
     * @param goodsTypeDto
     * @return
     */
    @Override
    public List<GoodsTypeDto> insetGoodsTypeDto(GoodsTypeDto goodsTypeDto) {
        if (Objects.isNull(goodsTypeDto)){
            return null;
        }
        goodsTypeDto.setStatus(1);

        goodsTypeDto.setId(UuidUtils.getId().toString());
        int insert = pdGoodsTypeDao.insert(goodsTypeDto);
        if (insert<1){
            return null;
        }

        GoodsTypeDto goodsTypeDto1 =  pdGoodsTypeDao.selectByName(goodsTypeDto.getName());
        List<PdTruckType> list = new ArrayList<>();
        List<PdTruckTypeGoodsType> list1 = new ArrayList<>();
        for (TruckTypeDto truckType : goodsTypeDto.getTruckTypes()) {
            PdTruckType pdTruckType = new PdTruckType();
            BeanUtils.copyProperties(truckType,pdTruckType);
            pdTruckType.setStatus(truckType.getGoodsTypes());
            pdTruckType.setStatus(1);
            list.add(pdTruckType);
            PdTruckTypeGoodsType pdTruckTypeGoodsType = new PdTruckTypeGoodsType();
            //pdTruckTypeGoodsType.setId(UuidUtils.getId().toString());
            pdTruckTypeGoodsType.setGoodsTypeId(goodsTypeDto1.getId());
            pdTruckTypeGoodsType.setTruckTypeId(truckType.getId());

        }

        int i = pdTruckTypeDao.insertBatch(list);
        if (i<1){
            return null;
        }


        int i1 = pdTruckTypeGoodsTypeDao.insertBatch(list1);
        if (i1<1){
            return null;
        }
        List<GoodsTypeDto> goodsTypeDtos = pdGoodsTypeDao.selectGoodsTypePage(null, null, goodsTypeDto.getName(), null);

        return goodsTypeDtos;
    }

    /**
     * 分页查询
     *
     * @param page
     * @param pageSize
     * @param name
     * @param truckTypeId
     */
    @Override
    public R<GetPageVo<GoodsTypeDto>> getGoodsTypePage(Long page, Long pageSize, String name, String truckTypeId) {
        if (Objects.isNull(page)) {
            page = 1L;
        }
        if (Objects.isNull(pageSize)) {
            pageSize = 20L;
        }
        System.out.println(page + " " + pageSize);
        PageHelper.startPage(page.intValue(), pageSize.intValue());

        List<GoodsTypeDto> list = pdGoodsTypeDao.selectGoodsTypePage(page, pageSize, name, truckTypeId);
        System.out.println(list);
        PageInfo<GoodsTypeDto> goodsTypeDtoPageInfo = new PageInfo<>(list);
        GetPageVo<GoodsTypeDto> goodsTypeDtoGetPageVo = new GetPageVo<GoodsTypeDto>(goodsTypeDtoPageInfo);


        return R.ok(goodsTypeDtoGetPageVo);
    }



    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public PdGoodsType queryById(String id) {
        return this.pdGoodsTypeDao.queryById(id);
    }

    /**
     * 分页查询
     *
     * @param pdGoodsType 筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @Override
    public Page<PdGoodsType> queryByPage(PdGoodsType pdGoodsType, PageRequest pageRequest) {
        long total = this.pdGoodsTypeDao.count(pdGoodsType);
        return new PageImpl<>(this.pdGoodsTypeDao.queryAllByLimit(pdGoodsType, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param pdGoodsType 实例对象
     * @return 实例对象
     */
    @Override
    public PdGoodsType insert(PdGoodsType pdGoodsType) {
        this.pdGoodsTypeDao.insert(pdGoodsType);
        return pdGoodsType;
    }

    /**
     * 修改数据
     *
     * @param pdGoodsType 实例对象
     * @return 实例对象
     */
    @Override
    public PdGoodsType update(PdGoodsType pdGoodsType) {
        this.pdGoodsTypeDao.update(pdGoodsType);
        return this.queryById(pdGoodsType.getId());
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(String id) {
        return this.pdGoodsTypeDao.deleteById(id) > 0;
    }


}
